/**
 * 对 axios 做封装
 */

import axios from 'axios'
import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus'

// 创建一个 axios 实例
const request = axios.create({
  // 请求基础路径
  //   /api/login                     => http://www.baidu.com/api/login
  //   http://www.sign.com/api/login  不会拼接 baseURL
  // baseURL: 'http://www.baidu.com'

  baseURL: 'http://localhost:3000', // TODO. 需要根据环境来做修改（本地开发与上线是不同的地址）

  timeout: 1000 * 3

  // headers: {
  //   // 不能在这儿传递 token, 因为这样是写死的，需要在每次调用接口时动态获取，放置在请求拦截器中。
  //   Authorization: 'token'
  // }
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 可以对config做一些修改
    // config.headers.xxx = 'ttt'

    // 获取token
    const token = useUserStore().token
    // 判断 token 存在就给请求中添加上token
    if (token) config.headers.Authorization = 'Bearer ' + token

    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // Http 状态码为 2xx 时执行，
    // response 是 axios 的那个包装对象，它 里面的 data 才是接口响应的内容
    const { data } = response

    // 判断业务状态码是否为 200
    if (data.code === 200) {
      return data
    } else {
      // 直接提示出错
      ElMessage.error(data.message)
      return Promise.reject(data.message)
    }
  },
  (error) => {
    // Http 状态码为 非 2xx 时执行，

    return Promise.reject(error)
  }
)

export default request
